package com.xbongbong.saas.service;

import com.xbongbong.paas.pojo.dto.FormDataAddDTO;
import com.xbongbong.paas.pojo.dto.FormDataDeleteBatchDTO;
import com.xbongbong.paas.pojo.dto.FormDataThoroughDeleteDTO;
import com.xbongbong.paas.pojo.dto.FormDataUpdateBatchDTO;
import com.xbongbong.paas.pojo.vo.FormDataDeleteBatchVO;
import com.xbongbong.paas.pojo.vo.FormDataThoroughDeleteVO;
import com.xbongbong.paas.pojo.vo.FormDataUpdateBatchVO;
import com.xbongbong.paas.pojo.vo.SetPaymentBatchVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.paas.toolbox.wrap.CancelRestoreBaseVO;
import com.xbongbong.pro.businessdata.pojo.dto.FocusDTO;
import com.xbongbong.pro.businessdata.pojo.vo.FollowVO;
import com.xbongbong.pro.listbatch.pojo.dto.AddCoUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.AddLabelDTO;
import com.xbongbong.pro.listbatch.pojo.dto.AddMainUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.ArchiveDTO;
import com.xbongbong.pro.listbatch.pojo.dto.CancelDTO;
import com.xbongbong.pro.listbatch.pojo.dto.ChangeMainDTO;
import com.xbongbong.pro.listbatch.pojo.dto.CreditFreezeDTO;
import com.xbongbong.pro.listbatch.pojo.dto.CreditRevokeDTO;
import com.xbongbong.pro.listbatch.pojo.dto.DelCoUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.DelMainUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.DelRemindDTO;
import com.xbongbong.pro.listbatch.pojo.dto.DistributionDTO;
import com.xbongbong.pro.listbatch.pojo.dto.HandoverDTO;
import com.xbongbong.pro.listbatch.pojo.dto.IsolationAddCoUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.IsolationCreateTeamDTO;
import com.xbongbong.pro.listbatch.pojo.dto.IsolationDelCoUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.IsolationDisbandTeamDTO;
import com.xbongbong.pro.listbatch.pojo.dto.ListBatchDTO;
import com.xbongbong.pro.listbatch.pojo.dto.OnlineDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionCompetitorDepDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionCompetitorUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionDepDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionMoveCompetitorDepDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionMoveCompetitorUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionMoveDepDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionMoveUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.PortionUserDTO;
import com.xbongbong.pro.listbatch.pojo.dto.ProductionStatusDTO;
import com.xbongbong.pro.listbatch.pojo.dto.RemindDTO;
import com.xbongbong.pro.listbatch.pojo.dto.StatusChangeDTO;
import com.xbongbong.pro.listbatch.pojo.dto.RemoveLableDTO;
import com.xbongbong.pro.listbatch.pojo.dto.UpdatePublicGroupDTO;
import com.xbongbong.pro.listbatch.pojo.vo.ListBatchVO;
import com.xbongbong.pro.listbatch.pojo.dto.UpdateRemindDTO;
import com.xbongbong.pro.listbatch.pojo.vo.RemindVO;
import com.xbongbong.pro.listbatch.pojo.vo.TeamBatchVO;

/**
 * 列表批量操作
 * @author haibin.zhang
 * @version v1.0
 * @date 2019/2/20 22:50
 * @since v1.0
 */
public interface ListBatchService {

    /**
     * 批量归档
     * @param archiveDTO
     * @return
     */
    BaseVO archive(ArchiveDTO archiveDTO) throws XbbException;

    /**
     * 批量分配
     * @param distributionDTO
     * @return
     */
    BaseVO distribution(DistributionDTO distributionDTO) throws XbbException;

    /**
     * 批量退回公海池
     * @param listBatchDTO
     * @return
     * @throws XbbException
     */
    BaseVO backCustomer(ListBatchDTO listBatchDTO) throws XbbException;

    /**
     * 批量移交
     * @param cancelDTO
     * @return
     */
    CancelRestoreBaseVO cancel(CancelDTO cancelDTO) throws XbbException;

    /**
     * 批量上下架
     * @param onlineDTO
     * @return
     */
    BaseVO online(OnlineDTO onlineDTO) throws XbbException;

    /**
     * Description: 批量添加负责人
     * @param addMainUserDTO
     * @return BaseVO
     * @throws XbbException
     * @author 刘阳
     * @date 2019/12/23 3:55 PM
     * @since v1.0
     */
    BaseVO addMainUser(AddMainUserDTO addMainUserDTO) throws XbbException;

    /**
     * Description: 批量移除
     * @param delMainUserDTO
     * @return BaseVO
     * @throws XbbException
     * @author 刘阳
     * @date 2019/12/23 3:56 PM
     * @since v1.0
     */
    BaseVO delMainUser(DelMainUserDTO delMainUserDTO) throws XbbException;


    /**
     * 批量添加协同人
     * @param addCoUserDTO
     * @return
     */
    BaseVO addCoUser(AddCoUserDTO addCoUserDTO) throws XbbException;

    /**
     * Description:批量移除协同人
     * @param delCoUserDTO
     * @author 刘阳
     * @date 2019/12/23 3:37 PM
     * @since v1.0
     */
    BaseVO delCoUser(DelCoUserDTO delCoUserDTO) throws XbbException;

    /**
     * 批量分配产品给员工
     * @param portionUserDTO
     * @return
     */
    BaseVO portionUser(PortionUserDTO portionUserDTO) throws XbbException;

    /**
     * 批量分配竞争对手
     * @param portionUserDTO
     * @return: com.xbongbong.paas.toolbox.wrap.BaseVO
     * @throws:
     */
    BaseVO portionCompetitorUser(PortionCompetitorUserDTO portionUserDTO) throws XbbException;

    /**
     * Description: 批量移除产品的员工
     * @param portionMoveUserDTO
     * @author 刘阳
     * @date 2020/1/3 10:18 AM
     * @since v1.0
     */
    BaseVO portionRemoveUser(PortionMoveUserDTO portionMoveUserDTO) throws XbbException;

    /**
     * 批量删除竞争对手可见人
     * @param portionMoveUserDTO
     * @return: com.xbongbong.paas.toolbox.wrap.BaseVO
     * @throws:
     */
    BaseVO portionRemoveCompetitorUser(PortionMoveCompetitorUserDTO portionMoveUserDTO) throws XbbException;

    /**
     * 批量分配产品给部门
     * @param portionDepDTO
     * @return
     */
    BaseVO portionDep(PortionDepDTO portionDepDTO) throws XbbException;

    /**
     * Description: 批量移除产品部门
     * @param portionMoveDepDTO
     * @author 刘阳
     * @date 2020/1/3 6:26 PM
     * @since v1.0
     */
    BaseVO portionRemoveDep(PortionMoveDepDTO portionMoveDepDTO) throws XbbException;


    /**
     * 批量分配竞争对手部门
     * @param portionDepDTO
     * @return: com.xbongbong.paas.toolbox.wrap.BaseVO
     * @throws:
     */
    BaseVO portionCompetitorDep(PortionCompetitorDepDTO portionDepDTO) throws XbbException;

    /**
     * 批量移除竞争对手可见部门
     * @param portionMoveDepDTO
     * @return
     * @throws XbbException
     */
    BaseVO portionRemoveCompetitorDep(PortionMoveCompetitorDepDTO portionMoveDepDTO) throws XbbException;


    /**
     * 批量删除
     * @param formDataDeleteBatchDTO
     * @return
     * @throws XbbException
     */
    FormDataDeleteBatchVO deleteBySingle(FormDataDeleteBatchDTO formDataDeleteBatchDTO) throws XbbException;

    /**
     * 批量删除
     * @param formDataDeleteBatchDTO
     * @return
     * @throws XbbException
     */
    FormDataDeleteBatchVO deleteBatch(FormDataDeleteBatchDTO formDataDeleteBatchDTO) throws XbbException;

    /**
     * 批量更新
     * @param formDataUpdateBatchDTO
     * @return
     * @throws XbbException
     */
    FormDataUpdateBatchVO updateBatch(FormDataUpdateBatchDTO formDataUpdateBatchDTO) throws XbbException;

    /**
     * 关注
     * @param focusDTO
     * @return
     */
    BaseVO focus(FocusDTO focusDTO) throws XbbException;

    /**
     * 最近跟进记录
     * @param listBatchDTO
     * @return
     */
    FollowVO getLastFollow(ListBatchDTO listBatchDTO) throws XbbException;

    /**
     * 批量生产单完成重启关闭
     * @param productionStatusDTO
     * @return
     */
    BaseVO setProductionStatus(ProductionStatusDTO productionStatusDTO) throws XbbException;
    /**
     * 设置回款已收款/设置付款已付款
     * @param listBatchDTO
     * @return
     */
    SetPaymentBatchVO setStatus(ListBatchDTO listBatchDTO) throws XbbException ;
    /**
     * 设置回款已收款
     * @param listBatchDTO
     * @return
     */
    SetPaymentBatchVO setPaymentStatus(ListBatchDTO listBatchDTO) throws XbbException;
    /**
     * 设置付款已付款
     * @param listBatchDTO
     * @return
     */
    SetPaymentBatchVO setPayPlanStatus(ListBatchDTO listBatchDTO) throws XbbException;
    /**
     * 还原
     * @param listBatchDTO
     * @return
     * @throws XbbException
     */
    BaseVO revert(ListBatchDTO listBatchDTO) throws XbbException;

    /**
     * 捞取
     * @param listBatchDTO
     * @return
     */
    BaseVO customerGrab(ListBatchDTO listBatchDTO) throws XbbException;

    /**
     * 彻底删除，实际上是更新操作
     * @param formDataThoroughDeleteDTO
     * @return
     * @throws XbbException
     */
    FormDataThoroughDeleteVO thoroughDelete(FormDataThoroughDeleteDTO formDataThoroughDeleteDTO) throws XbbException;

    /**
     * 加入访客计划
     *
     * @param formDataAddDTO 入参
     * @return 是否成功
     * @throws XbbException 异常
     */
    BaseVO joinCommunicatePlan(FormDataAddDTO formDataAddDTO) throws XbbException;

    /**
     * 保存跟进提醒
     *
     * @param formDataAddDTO 入参
     * @return 是否成功
     * @throws XbbException 异常
     */
    BaseVO pushNotify(FormDataAddDTO formDataAddDTO) throws XbbException;

    /**
     * 获取跟进提醒
     *
     * @param remindDTO 入参
     * @return 是否成功
     * @throws XbbException 异常
     */
    RemindVO getRemind(RemindDTO remindDTO) throws XbbException;

    /**
     * 删除提醒
     * @param delRemindDTO
     * @return
     * @throws XbbException
     */
    BaseVO deleteRemind(DelRemindDTO delRemindDTO) throws XbbException;

    /**
     * 信用账户冻结/解冻
     * @param creditFreezeDTO
     * @return
     */
    BaseVO creditFreeze(CreditFreezeDTO creditFreezeDTO) throws XbbException;

    /**
     * 临时额度撤销/重新生效
     * @param creditRevokeDTO
     * @return
     */
    BaseVO creditRevoke(CreditRevokeDTO creditRevokeDTO) throws XbbException;

    /**
     * 编辑提醒
     * @param updateRemindDTO
     * @return
     * @throws XbbException
     */
    BaseVO updateRemind(UpdateRemindDTO updateRemindDTO) throws XbbException;


    /**
     * 批量打标签
     * @param addLabelDTO
     * @return
     * @throws XbbException
     */
    BaseVO addLabelBatch(AddLabelDTO addLabelDTO) throws XbbException;

    /**
     * 批量移除标签
     * @param removeLableDTO
     * @return
     * @throws XbbException
     */
    BaseVO removeLabelbatch(RemoveLableDTO removeLableDTO) throws XbbException;

    BaseVO changePublicGroupBatch(UpdatePublicGroupDTO updatePublicGroupDTO) throws XbbException;

    BaseVO changeStatus(StatusChangeDTO statusChangeDTO) throws XbbException;

    /**
     * 隔离模式下列表页新增协同人
     *
     * @param isolationAddCoUserDTO
     * @return
     */
    TeamBatchVO addCoUserForIsolation(IsolationAddCoUserDTO isolationAddCoUserDTO) throws XbbException;

    /**
     * 隔离模式下列表页删除协同人
     *
     * @param isolationDelCoUserDTO
     * @return
     * @throws XbbException
     */
    TeamBatchVO delCoUserForIsolation(IsolationDelCoUserDTO isolationDelCoUserDTO) throws XbbException;

    /**
     * 列表页批量创建团队
     *
     * @param isolationCreateTeamDTO
     * @return
     */
    TeamBatchVO createTeam(IsolationCreateTeamDTO isolationCreateTeamDTO) throws XbbException;

    /**
     * 列表页解散团队
     *
     * @param isolationDisbandTeamDTO
     * @return
     */
    TeamBatchVO disbandTeam(IsolationDisbandTeamDTO isolationDisbandTeamDTO) throws XbbException;

    /**
     * 移交负责人
     *
     * @param changeMainDTO
     * @return
     */
    TeamBatchVO changeMain(ChangeMainDTO changeMainDTO) throws XbbException;
}
